/**
 * @file drv_adc.h
 * @brief ADC驱动头文件
 * @version 0.1
 * @date 2024-01-30
 */
#ifndef __DRV_ADC_H__
#define __DRV_ADC_H__

#include <rtthread.h>
#include "n32g031.h"

/* ADC设备句柄 */
typedef int AdcDevice;

/* ADC通道配置结构体 */
struct adc_channel_config
{
    uint32_t channel;      /* ADC通道号 */
    uint32_t sample_time;  /* 采样时间 */
};

/* ADC设备配置结构体 */
struct adc_config
{
    uint32_t data_align;           /* 数据对齐方式 */
    uint32_t scan_mode;            /* 扫描模式 */
    uint32_t continuous_mode;      /* 连续转换模式 */
    uint32_t external_trig_conv;   /* 外部触发转换 */
    uint32_t external_trig_edge;   /* 外部触发边沿 */
    uint32_t dma_enable;           /* DMA使能 */
};

/* ADC错误码 */
#define RT_ADC_ERR_INVALID_PARAM   (-1)    /* 无效参数 */
#define RT_ADC_ERR_BUSY            (-2)    /* 设备忙 */

/* ADC设备操作接口 */
int adc_init(void);
int adc_config_channel(AdcDevice device, struct adc_channel_config *config);
int adc_start(AdcDevice device);
int adc_stop(AdcDevice device);
int adc_read(AdcDevice device, uint16_t *buffer, uint32_t length);

#endif /* __DRV_ADC_H__ */